package com.example.producer;

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;

//发送消息
//工作队列模式
public class Producer_PubSub {
    public static void main(String[] args) throws IOException, TimeoutException {
//        1. 创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
//        2. 设置参数
        connectionFactory.setHost("192.168.254.129");
        connectionFactory.setPort(5672);
        connectionFactory.setVirtualHost("/myHost");
        connectionFactory.setUsername("h790864074");
        connectionFactory.setPassword("h13834968356");
//        3. 获取连接
        Connection connection = connectionFactory.newConnection();
//        4. 创建Channel
        Channel channel = connection.createChannel();
//        5. 创建交换机
//          exchange : 交换机的名称
//          type: 交换机的类型 有四种：
//            direct：定向,fanout：广播（扇形）---发送消息到与之绑定的每一个队列,topic,headers
//          durable:是否持久化
//          autoDelete:自动删除
//          internal: 内部使用.一般false
//          arguments: 参数
        channel.exchangeDeclare("test_fanout_exchange", BuiltinExchangeType.FANOUT, true,false,false, null);
//        6. 创建队列
        channel.queueDeclare("test_fanout_queue", true, false, false, null);
        channel.queueDeclare("test_fanout_queue2", true, false, false, null);
//        7. 绑定队列和交换机
//          1. queue:队列名称
//          2. exchange:交换机名称
//          3. routingKey:路由键--如果交换机的类型为fanout,routingKey设置为”“
        channel.queueBind("test_fanout_queue", "test_fanout_exchange", "");
        channel.queueBind("test_fanout_queue2", "test_fanout_exchange", "");
//        8. 发送消息
        channel.basicPublish("test_fanout_exchange", "", null, "发布订阅".getBytes(StandardCharsets.UTF_8));
//        9. 释放资源
        channel.close();
        connection.close();
    }
}
